#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;
typedef long long LL;
const int N = 33;
LL C[N][N];
void Init() {
    C[0][0] = 1;
    for (int i=1; i<N; ++i) {
        C[i][0] = 1;
        C[i][i] = 1;
        for (int j=1; j<i; ++j) {
            C[i][j] = C[i-1][j-1] + C[i-1][j];
        }
    }
}
set<LL> S;
int D,H;
void DFS(int a, int cnt, LL res, int deep) {
    if (deep==D && cnt!=0) return;
    if (cnt==0 && deep==D) {
        S.insert(res);
        return;
    }
    for (int t=a; t<=cnt; ++t) {
        DFS(t, cnt-t, res*C[cnt][t], deep+1);
    }
}

int main() {
#ifdef hai
    freopen("in.txt", "r", stdin);
#endif
    Init();
//    for (int i=0; i<N; ++i) {
//        for (int j=0; j<=i; ++j) {
//            printf("%lld ", C[i][j]);
//        }
//        printf("\n");
//    }
    while (cin>>D>>H) {
        S.clear();
        DFS(0, H-1, 1, 0);
        for (set<LL>::iterator it=S.begin(); it!=S.end(); ++it) {
            printf("%lld\n", *it);
        }
    }
    return 0;
}
